How to Complete the Phases of Craftship Homework (Assignments, Exercises)

Last updated: December 14th, 2023

Now that we understand the Phases of Craftship, let’s review what we’re going to build and how we’re going to move through ‘em.

Lesson goals

  • Get an introduction to the main assignment you’ll use (DDDForum)
  • Have a clear understanding of the homework structure (exercises, assignments) and other elements we’ll use to move through the Phases of Craftship

Assignments

For each of the Phases of Craftship, your chief assignment will be to focus in on a subset of the essentials.

You’ll do this by refining the following application: DDDForum.

DDDForum

DDDForum is something that I built to share what I was learning about DDD when I was in the Pattern-First phase of craftship & building solidbook.io.

It’s up on GitHub, and while it’s a bit out of date, it has helped a lot of developers get to Pattern-First themselves.

You can see the original version & the old code for it here.

Here’s how I originally described it in the past:

DDDForum is a hackernews or reddit-like forum/news site where members can chat about Domain-Driven Design and learn from others in the community. Members can post links, ask questions, share what they're working on, and spark conversations about anything DDD related.

How does it work?

Once a user is signed up, they can create a post (also sometimes called a submission).

In order to submit a post, it must contain a title and either a text (for posts where the member just wants to start a conversation) or a link (in order to promote or start a conversation on a piece of content).

When a post gets created, the post starts with an automatic upvote from the member it belongs to (hey, you posted it - it's most likely you're a fan of your own content too).

The designer decided it was a good idea to improve UX by ensuring that when a member creates a new post, it starts with a positive score of 1. It was an empathetic design decision that originated from trying to make users feel better knowing their post has value initially, rather than starting from 0.

Any member from the community (including the member who created the post) can cast a vote, post a comment, and cast votes on comments as well.

Not only can you write a comment against a post, but you can also post a reply to a comment. Clicking the "Reply" button takes you to the thread page for that comment where you can write your reply.

Comments can be nested in - so when you reply to a comment, and someone replies to your reply, it creates a nested thread of replies.

Nested replies on the post.

Most importantly, every post has a score to it. The score is calculated by the following simple equation:

(# of post upvotes + # of comment *upvotes) - (# of post downvotes + # of comment downvotes)

Only comment upvotes from other members, not the original author of the comment, are included.

For now, the post with the highest score is shown at the front of DDDForum.com in the popular section.

The post with the most points is shown at the top of the popular page.

Anonymous visitors to DDDForum.com can view everything that members can view, but they need to become a member in order to submit posts, comments, and cast votes.

 

That’s the gist of DDDForum.

Why we’re using this

Now, this is merely the vessel for us to learn the essentials.

I like this app because the domain is simple enough; most are familiar with it. It’s not that hard to understand, yet still has a fair amount of complexity, both in the UI and in the backend.

Ultimately, it’s a funky lookin’ forum site.

How we’ll go about building this

Lesson prompts

Alright, so here’s what we’re going to do.

In the next lesson, I’ll get you to get your workstation setup so that we can start making progress towards the assignments.

Along the way, I’ll present you with key lessons that will highlight what’s most important for you to know regarding the 12 essentials.

These lessons will primarily be written in text but will be supported with video demonstrations & discussions where appropriate.

Most importantly, the lessons will prompt you to implement aspects of what you’re learning to your assignments. You’ll want to take a moment to do that as you’re learning, asking questions in #course-chat if you get stuck.

Milestones

To make sure you’re on track, you’ll come across assignment milestones. These act as checkpoints to ensure that you’re on track.

For each Phase, you’ll find a number of assignment milestones and a single submission.

Submissions

At the end of each phase, you’ll submit your assignments to #the-feedback-loop.

You’ll see a video on how to do this shortly.

At that point, you can get and give feedback on your assignments, compare with others, and check out the demonstrations & discussions.

Exercises

Sometimes we’ll need to take a detour to learn a new skill or explore some other concept.

I’ll get you to do some accompanying exercises as well.

You’ll submit these similarly to the way we do the assignments.

Grading Checklists

How will you know you’re complete with an assignment? You’ll want to use the Grading Checklists.

Note: I’m referring to your FizzBuzz exercise that you’ll do in Best Practice-First as an “assignment”. It’s actually an “exercise”.

FAQ

What if I get stuck with an assignment or an exercise?

No worries! That’s what the community is for.

Jump on Discord and use #course-chat to ask questions, leave comments, clarify things or share your insights.

What should I do if I come back and there are new exercises or assignment milestones?

I will sometimes update the curriculum.

To signal changes, you can always take a look at the Action Item Checklist which doubles as what you should do in sequence, and a changelog.

Cool! How can I get setup?

Head over to the next lesson!

Summary

  • In summary, you’re going to work through an assignment for each Phase of Craftship
  • You’ll use the lessons to prompt you towards the completion of an assignment for a Phase.
  • Each assignment has milestones which acts as a checkpoint to make sure you’re on the right track.
  • Each assignment has a final submission to #the-feedback-loop in Discord where you’ll be able to submit your assignment, review others’ submissions and share feedback.
  • You’ll occasionally be instructed to do exercises in order to learn some additional necessary skills for your assignments.
  • You’ll submit your exercises as well
  • If you get stuck, don’t forget to use #general-chat to ask for help.

If you have any questions or suggestions to improve this lesson, leave a comment below.

As always, To Mastery.


Tharun

The post with the most points is shown at the top of the popular page.

Anonymous visitors to DDDForum.com can view everything that members can view, but they need to become a member in order to submit posts, comments, and cast votes.

Above paragraphs added twice, one of them can be removed

REPLY
Taha

Hi Tharun, Thanks for pointing this out. I've removed it.

REPLY